from django.db import models


# Create your models here.

class User(models.Model):
    username = models.CharField(max_length=64, unique=True)
    password = models.CharField(max_length=128)
    email = models.CharField(max_length=128, unique=True)
    description = models.TextField()

    def __str__(self):
        return f"User {self.username}"


class Group(models.Model):
    groupname = models.CharField(max_length=255)
    leaderid = models.IntegerField()
    # 添加auto_now_add=True之后，在我们使用 Group.objects.create() 方法创建新的 Group 实例时，Django 会自动将 createdtime 字段设置为当前时间。
    createdtime = models.DateTimeField()
    description = models.TextField()

    def __str__(self):
        return f"Group {self.groupname}"


class GroupMember(models.Model):
    group_id = models.IntegerField()
    user_id = models.IntegerField()
    def __str__(self):
        return f"GroupMember {self.id}"

# 这个 Document 模型用于存储和管理文档及其相关信息，
class Document(models.Model):
    title = models.CharField(max_length=255, unique=True)
    creator_id = models.IntegerField()
    create_time = models.DateTimeField()
    modified_time = models.DateTimeField(null=True)
    content = models.TextField(null=True, blank=True)

    modify_right = models.IntegerField()
    share_right = models.IntegerField()
    #用户讨论文档的权限。这是一个整数字段
    discuss_right = models.IntegerField()
    # 其他用户修改文档的权限。这是一个整数字段。
    others_modify_right = models.IntegerField()
    others_share_right = models.IntegerField()
    others_discuss_right = models.IntegerField()
    #  表示文档是否已被放入回收站的标志。这是一个整数字段。
    recycled = models.IntegerField(default=0)
    # 表示文档是否被占用的标志
    is_occupied = models.IntegerField()# 0: Not occupied, 1: Occupied
    # 表示文档所属的组。0 表示文档是个人文档，非 0 值表示文档属于一个组
    group_id = models.IntegerField()# 0: Personal document, not 0: Group document

    def __str__(self):
        return f"Document {self.title}"


# 这个 DocumentUser 模型用于存储和管理文档和用户之间的关系，如用户最后观看或修改文档的时间、用户是否收藏了文档以及文档的类型等。
class DocumentUser(models.Model):
    document_id = models.IntegerField()
    user_id = models.IntegerField()
    # 用户最后观看文档的时间。
    last_watch = models.DateTimeField(null=True)
    #  表示用户是否收藏了文档的标志
    favorited = models.IntegerField()
    modified_time = models.DateTimeField(null=True)
    type = models.IntegerField()# 0: personal 1: group 2: 被分享的团队文档


class Comment(models.Model):
    document_id = models.IntegerField()
    #  评论创建者的ID
    creator_id = models.IntegerField()
    # 评论的内容
    content = models.TextField()
    created_time = models.DateTimeField()


# Notice 模型用于存储和管理用户之间发送的通知及其相关信息
class Notice(models.Model):
    # 发送通知的用户ID
    sender_id = models.CharField(max_length=255)
    receiver_id = models.CharField(max_length=255)
    # 与通知相关联的文档ID
    document_id = models.IntegerField()
    # 与通知相关联的团队ID
    group_id = models.IntegerField()
    send_time = models.DateTimeField()
    content = models.TextField()
    # 通知的类型
    type = models.IntegerField()

# # type:
# # 0:我被踢出团队 传content、group_id "a将你踢出了团队xxx"
# # 1:我被邀请加入某个团队，我选择接受加入团队 传group_id、content 发送给sender "a通过了你的邀请"
# # 2:我邀请他人加入某个团队，对方通过/拒绝 传group_id、content 发送给receiver "a邀请你加入团队xxx"
# # 3:我创建的文档被评论 评论者传给创建者 document_id、content 发送 "你的文档xxx被a评论"
# # 4:收到了来自他人分享来的文件，传document_id、content 由sender发送 "你收到了来自a分享的文档xxx"
# # 5:我被邀请加入某个团队，我选择拒绝加入团队 传group_id、content 发送给sender "a拒绝了你的邀请"
# # 6:我主动申请加入某个团队(先模糊检索团队名)，传group_id、content，发给团队leader "a申请加入团队xxx"
# # 7:团队leader接受了对方的加入团队申请，传给申请人group_id、content 发送给申请人 "团队xxx接受了你的邀请"
# # 8:团队leader拒绝了对方的加入团队申请，传给申请人group_id、content 发送给申请人 "团队xxx拒绝了你的邀请"
# # 9:用户主动退出某一个团队，向团队管理者发送消息
#
# Message 模型用于存储和管理用户之间发送的私人消息及其相关信息
class Message(models.Model):
    sender_id = models.IntegerField()
    receiver_id = models.IntegerField()
    send_time = models.DateTimeField()
    content = models.TextField()
